#include<bits/stdc++.h>
#define int long long
#define N 3000006
using namespace std;

int n;
vector<int>p[N];

namespace Sub1 {
    int z[N];
    void Sol() {
        for(int i = 1; i <= n; i++)
        for(int j = 0; j < p[i].size(); j++) z[p[i][j]]++;
        for(int i = 0; i <= 3000000; i++) {
            if(z[i]) z[i + 1] += z[i] - 1;
        }
        int tot = 0;
        for(int i = 0; i <= 300000; i++)
            if(z[i]) tot = i;
        for(int i = tot; i >= 0; i--) cout << z[i];
    }
}

namespace Sub2 {
    int a[N];
    bool vis[N], ans[N];
    void Sol() {
        for(int i = 1; i <= n; i++) a[i] = p[i][0];
        sort(a + 1, a + n + 1);
        for(int i = 1; i <= n; i++) {
            int now = a[i];
            while(vis[now]) now++;
            vis[now] = 1;
        }
        int tot = 0;
        for(int i = 0; ; i++) {
            if(vis[i]) {
                ans[i] = 1;
                tot++;
                if(tot == n) {
                    for(int j = i; j >= 0; j--) cout << ans[j];
                    return;
                }
            }
            else ans[i] = 0;
        }
    }
}



signed main() {
    freopen("mcmf.in", "r", stdin);
    freopen("mcmf.out", "w", stdout);
    ios::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);

    bool flag = 1;
    cin >> n;
    for(int i = 1; i <= n; i++) {
        int len;
        cin >> len;
        if(len != 1) {
            flag = 0;
            break;
        }
        for(int j = 1, x; j <= len; j++) {
            cin >> x; x--;
            p[i].push_back(x);
        }
    }

    if(flag) {
        Sub2::Sol();
        return 0;
    }
    Sub1::Sol();


    return 0;
}